import BackGround from './runtime/background'; // 导入背景类
import Button from './runtime/button'; // 导入按钮类
import Music from './runtime/music.js'; // 导入按钮类
import DataBus from './databus'; // 导入数据类，用于管理游戏状态和数据
// 初始化系统信息
const systemInfo = tt.getSystemInfoSync();
const canvas = tt.createCanvas(); //创建一个画布
const ctx = canvas.getContext('2d'); //创建一个基于画布的绘图上下文。

// 游戏状态管理
let gameState = "home"
GameGlobal.databus = new DataBus(); // 全局数据管理，用于管理游戏状态和数据
GameGlobal.musicManager = new Music(); // 全局音乐管理实例

/**
 * 游戏主函数
 */
export default class Main {
	bg = new BackGround(canvas); // 创建背景
	btn = new Button(canvas); // 创建按钮



	// 游戏界面元素
	gameScreen = { spots: [] };

	constructor() {
		// 画面尺寸适配
		canvas.width = systemInfo.windowWidth;
		canvas.height = systemInfo.windowHeight;
		this.loadResources().then(() => {
			this.render()
			tt.onTouchStart(res => this.handleTouch(res));
		});
		// 音乐自动播放
		GameGlobal.musicManager.playbgMusic();
	}

	// 绘制首页界面
	render() {
		ctx.clearRect(0, 0, canvas.width, canvas.height); // 先清空清空画布
		this.bg.render(ctx); // 绘制背景
		this.btn.render(ctx); // 绘制按钮
	}
	// 绘制游戏界面
	drawGame() {
		ctx.clearRect(0, 0, canvas.width, canvas.height); // 先清空清空画布
		this.bg.renderGame(ctx); // 绘制游戏背景
		this.btn.renderGame(ctx, this.gameScreen); // 绘制游戏可点击区域和计分板
	}

	// 开始游戏
	startGame() {
		GameGlobal.databus.reset(); // 重置数据
		gameState = 'game';
		GameGlobal.databus.numberGame.clickedCount = 0;
		this.generateSpots();
		this.drawGame();
	}

	// 加载资源
	loadResources() {
		return new Promise((resolve) => {
			// 加载背景图片
			GameGlobal.databus.resources.homeBg = tt.createImage();
			GameGlobal.databus.resources.homeBg.onload = () => checkLoaded();
			GameGlobal.databus.resources.homeBg.src = 'https://xhy-1256039008.cos.ap-shanghai.myqcloud.com/xyx/img/homebg.png';
			// 游戏背景图
			GameGlobal.databus.resources.gameBg = tt.createImage();
			GameGlobal.databus.resources.gameBg.onload = () => checkLoaded();
			GameGlobal.databus.resources.gameBg.src = 'https://xhy-1256039008.cos.ap-shanghai.myqcloud.com/xyx/img/gemgbg.png';
			let loadedCount = 0;
			const total = Object.keys(GameGlobal.databus.resources).length;

			function checkLoaded() {
				if (++loadedCount === total) resolve();
			}
		});
	}


	// 触摸事件处理
	handleTouch(e) {
		const touch = e.touches[0];
		const x = touch.clientX;
		const y = touch.clientY;

		if (gameState === 'home') {
			if (this.btn.isTouchStartBtn(x, y)) {
				// 是否触摸开始按钮
				this.startGame();
			} if (this.btn.isTouchrukouBtn(x, y)) {
				// 是否触摸入口按钮
				tt.checkScene({
				    scene: "sidebar",
				    success: (res) => {
				        console.log("check scene success: ", res.isExist);
						if(res.isExist){
							tt.navigateToScene({
							    scene: 'sidebar',
							    fail: console.log,
							    success: console.log
							})
						}
				        //成功回调逻辑
				    },
				    fail: (res) => {
				        console.log("check scene fail:", res);
				        //失败回调逻辑
				    }
				});
			} 
			else if (this.btn.isTouchMusicBtn(x, y)) {
				// 是否触摸音乐
				this.toggleMusic();
			}
		} else if (gameState === 'game') {
			this.checkClick(x, y);
		} else if (gameState === 'success') {
			gameState = 'home';
			this.render();
		} else if (gameState === 'fail') {
			if (this.btn.isTouchStartBtn(x, y)) {
				// 是否触摸开始按钮
				this.startGame();
			} else if (this.btn.isTouchMusicBtn(x, y)) {
				// 是否触摸音乐
				this.toggleMusic();
			}
		}
	}

	// 切换音乐
	toggleMusic() {
		GameGlobal.musicManager.toggleMusic()
		this.render();
	}

	// 游戏检查点击
	checkClick(x, y) {
	    let isValidClick = false; // 标记是否找到有效点击
	    
	    for (let i = 0; i < this.gameScreen.spots.length; i++) {
	        const spot = this.gameScreen.spots[i];
	        const dx = x - spot.x;
	        const dy = y - spot.y;
	        const distance = Math.sqrt(dx * dx + dy * dy);
	        
	        if (distance <= spot.r && !spot.isClicked) { // 新增判断是否已点击
	            
	            GameGlobal.musicManager.playSuccessMusic();
	            GameGlobal.databus.numberGame.clickedCount++;
	            spot.isClicked = true; // 标记为已点击
	            this.gameScreen.spots[i].r += 10;
	            this.drawGame();
	            isValidClick = true;
	
	            if (GameGlobal.databus.numberGame.clickedCount === GameGlobal.databus.numberGame.totalSpots) {
	                this.showSuccess();
	            }
	            return; // 点击有效后立即返回
	        } else {
	        }
	    }
	
	    // 循环结束未找到有效点击
	    if (!isValidClick) {
			 GameGlobal.databus.numberGame.totalError++;
	        // GameGlobal.musicManager.failCikMusic();
	        console.log("点击失败",GameGlobal.databus.numberGame.totalError); // 新增失败提示
			if (GameGlobal.databus.numberGame.totalError > 5) {
			    console.log("点击失败22222"); // 新增失败提示
			    this.showError();
			}
	        return;
	    }
	
	    // 保持原有次数校验逻辑
	    
	}

  // 辅助函数
  isInRect(x, y, rect) {
  	return x >= rect.x && x <= rect.x + rect.w &&
  		y >= rect.y && y <= rect.y + rect.h;
  }
	// 显示失败界面
	  showError() {
	     gameState = 'fail'; // 设置游戏状态为失败
	     // 如果需要失败音效可以取消注释
	     // GameGlobal.musicManager.playFailMusic();
	     
	     // 绘制半透明黑色背景
	     ctx.fillStyle = 'rgba(0, 0, 0, 0.8)';
	     ctx.fillRect(0, 0, canvas.width, canvas.height);
	     
	     // 失败提示文字
	     ctx.fillStyle = '#FFFFFF';
	     ctx.font = '36px Arial';
	     ctx.textAlign = 'center';
	     ctx.fillText('查询失败！', canvas.width / 2, canvas.height / 2 - 80);
	     
	     // 创建按钮容器
	     const buttons = [
	         {
	             x: canvas.width / 2 - 60,
	             y: canvas.height / 2 + 60,
	             width: 120,
	             height: 60,
	             text: '重新开始',
	             onClick: this.restartGame
	         },
	         {
	             x: canvas.width / 2 + 60,
	             y: canvas.height / 2 + 60,
	             width: 120,
	             height: 60,
	             text: '看视频查答案',
	             onClick: ()=>{console.log(11111)}
	         }
	     ];
	 
	     // 绘制按钮
	     buttons.forEach(btn => {
	         // 按钮背景（玻璃质感）
	         ctx.fillStyle = 'rgba(0, 0, 0, 0.3)'; // 半透明黑
	         ctx.strokeStyle = '#FFFFFF';
	         ctx.lineWidth = 2;
	         ctx.beginPath();
	         ctx.roundRect(btn.x, btn.y, btn.width, btn.height, 10);
	         ctx.fill();
	         ctx.stroke();
	 
	         // 按钮文字
	         ctx.fillStyle = '#FFFFFF';
	         ctx.font = '20px Arial';
	         ctx.textAlign = 'center';
	         ctx.fillText(btn.text, btn.x + btn.width/2, btn.y + btn.height/2 + 5);
	         
	         // 视频按钮图标（仅第二个按钮）
	         if(btn.text === '看视频查答案') {
	             this.drawPlayIcon(btn.x + 40, btn.y + 20, 20, 20);
	         }
	     });
	 }
	 
	 // 绘制播放图标
	  drawPlayIcon(x, y, size) {
	     ctx.fillStyle = '#FFFFFF';
	     ctx.beginPath();
	     ctx.moveTo(x, y);                 // 左上点
	     ctx.lineTo(x + size/2, y);         // 右上点
	     ctx.lineTo(x + size/2, y + size);   // 右下点
	     ctx.closePath();
	     ctx.fill();
	 }
	 
	 // 事件处理函数（示例）
	  restartGame() {
	     // 重置游戏状态
	     gameState = 'playing';
	     // 初始化游戏数据
	     initializeGame();
	     // 切换回游戏界面
	     gameLoop();
	 }
	 
	  gotoVideo() {
	     // 跳转抖音视频（需要根据平台API实现）
	     // 示例代码：
	     if (typeof tt !== 'undefined' && tt.game) {
	         tt.game.openVideo({
	             videoId: 'YOUR_VIDEO_ID',
	             success: () => {
	                 console.log('视频播放成功');
	             },
	             fail: (err) => {
	                 console.error('视频播放失败', err);
	             }
	         });
	     }
	 }
	// 显示成功界面
	showSuccess() {
		gameState = 'success';
		GameGlobal.musicManager.playSuccessMusic();
		ctx.fillStyle = 'rgba(0,0,0,0.8)'; // ✨ 直接使用属性赋值
		ctx.fillRect(0, 0, canvas.width, canvas.height);
		ctx.fillStyle = '#FFFFFF'; // ✨ 直接使用属性赋值
		ctx.font = '40px Arial';
		ctx.fillText('恭喜通关！', canvas.width / 2 - 100, canvas.height / 2);
	}

	// 随机圆点
	generateSpots() {
	    this.gameScreen.spots = [];
	    const SPOT_RADIUS = 30;      // 圆点半径
	    const MIN_DISTANCE = 60;     // 最小间距（两倍半径）
	    
	    // 根据需求定义生成区域（含安全边距）
	    const generateArea = {
	        x: 30,                    // X起始位置 = 0 + 半径
	        y: 100 + SPOT_RADIUS,      // Y起始位置 = 100 + 半径
	        width: canvas.width - 60,   // 宽度 = 全屏 - 两侧半径
	        height: (canvas.height - 100) - SPOT_RADIUS*2 // 高度 = 区域高度 - 底部半径
	    };
	
	    for (let i = 0; i < 5; i++) {
	        let isValid = false;
	        let newSpot;
	
	        // 循环生成直到找到符合条件的点
	        while (!isValid) {
	            // 在限定区域内随机生成坐标（含安全边距）
	            newSpot = {
	                x: Math.random() * generateArea.width + generateArea.x,
	                y: Math.random() * generateArea.height + generateArea.y,
	                r: SPOT_RADIUS,
					isClicked: false // 新增属性
	            };
	
	            // 检查边界条件（二次验证）
	            isValid = (
	                newSpot.x >= generateArea.x && 
	                newSpot.x <= generateArea.x + generateArea.width &&
	                newSpot.y >= generateArea.y && 
	                newSpot.y <= generateArea.y + generateArea.height
	            ) && 
	
	            // 检查与所有现有点的距离
	            this.gameScreen.spots.every(existing => {
	                const dx = newSpot.x - existing.x;
	                const dy = newSpot.y - existing.y;
	                return Math.sqrt(dx*dx + dy*dy) >= MIN_DISTANCE;
	            });
	        }
	
	        this.gameScreen.spots.push(newSpot);
	    }
	}
}